package top.truism.array;

/**
 * 删除有序数组中的重复元素
 */
public class DeleteDuplicateElement {

    public static int removeDuplicateElement(int[] arr) {
        int end = arr.length - 1;
        int i = 0;
        while (i < end) {
            if(arr[i] == arr[i+1]) {
                for(int j = i; j < end; j++) {
                    arr[j] = arr[j+1];
                }
                end--;
            }else {
                i++;
            }
        }
        return end + 1;
    }

    public static int removeDuplicate(int[] arr) {
        int i = 0;
        for (int j = 1; j < arr.length; j++) {
            if(arr[i] != arr[j])  {
                i++;
                arr[i] = arr[j];
            }
        }
        return i+1;
    }

    /**
     * 允许存在 n 个重复元素
     * @param arr
     * @param n
     * @return
     */
    public static int removeDuplicate(int[] arr, int n) {

        int i = 0;
        for (int j = 0; j < arr.length; j++) {
            if(i < n || arr[j] != arr[i-n]) {
                i++;
                arr[i] = arr[j];
            }
        }
        return i;
    }
}
